@ /0

Inicio JP InicioTeste

BufIOFim  K BufIO  ; Ponteiro para fim do buffer IO
BufIO     $ =8
TMP0      K /0
TMP1      K /0
TMP2      K /0
TMP3      K /0
TMP4      K /0
TMPP      L /0
SP        K /0
FP        K /0
FPTMP     K /0
; Constantes Numericas
TrintaHex K /30
CemHex    K /100
DezDec    K =10
DezMilDec K =10000
; Constantes Caracteres
CR        K /d
Sinal     K /2d
Sinal_    K /2d20
; Constantes Operadores
Store     MM /0    ; Base para instrucao de store
Load      LD /0    ; Base para instrucao de load

InicioTeste LV BP ; TESTE DA SUB-ROTINA
MM FP
MM SP
MM TMP3 ; Guarda posicao inicial de FP
LV =16
SC PUSH
LV =16
SC PUSH
LV =16
SC PUSH
LV =16
SC PUSH
LV =16
SC PUSH
LV =16
SC PUSH
SC POP
SC POP
SC POP
SC POP
SC POP
SC POP
LD FP   ; Deve esta +16 em relacao a origem
MM TMP4 ; Guarda posicao final de FP
HM /0

; SUBROTINA PUSH
; Aloca espaco na pilha de acordo com o espaco determinado no acumulador
; Preenche automaticamente o endereco do RA anterior e o display com este mesmo
; endereco
PUSH K /0
MM TMPP   ; Guarda o tamanho requisitado
LD FP
MM FPTMP  ; Guarda o end. do RA atual
LD SP
MM FP     ; Desloca FP
LD TMPP
+ SP
MM SP     ; Desloca SP

LD FP
+ Store
MM DisplayPush ; Monta instrucao para preencher display padrao
LD FPTMP
DisplayPush MM /0 ; Instrucao montada para salvar o display
               ; com o valor do RA anterior

LV /4
+ FP
+ Store
MM RAAntPush ; Monta instrucao para preencher end. do RA anterior padrao
LD FPTMP
RAAntPush MM /0 ; Instrucao montada para salvar o end. do RA anterior

RS PUSH ; FIM DA SUBROTINA PUSH

; SUBROTINA POP
; Desaloca espaco na pilha, usa como referencia o valor presente no campo
; endereco do RA anterior
POP K /0

LD FP
MM SP

LV /4
+ FP
+ Load
MM RAAntPop ; Monta instrucao para preencher end. do RA anterior padrao
RAAntPop LD /0 ; Instrucao montada para salvar o end. do RA anterior
MM FP

RS POP ; FIM DA SUBROTINA POP

BP $ =500

# Inicio